#include <iostream>
#include <random>       //使用这个库来生成随机数

/*
需求：
这是一个猜数字的游戏，主要功能是让程序在1~100当中选择一个数字，然后让用户去猜测这个数字，程序会告诉用户距离数字的范围。
比如说大了、小了，直到用户猜测到这个数字

思路：
1、首先要实现一个1~100的随机数
2、需要接收用户的输入参数
3、使用条件判断来判断用户输入数字和随机数的距离
4、在用户猜对之后，祝贺用户
*/

/*
这里主要体验到命名空间的问题，就是namespace，比如说下面代码当中需要用到通用输入输出，是在std这个命名空间下的
那么就可以在代码的最上面定义一下后续命名空间，这样后续直接使用对应的函数即可，不需要再重申命名空间了
命名空间主要功能就是为了避免命名冲突，比如说我们自己定义了一个cout函数，那么实际上不会和std::cout冲突，因为处于不同的命名空间下面


不过在大型的C++项目当中，命名空间会导致全局的命名空间被污染（不如不同的库有同名函数时）
在实际开发流程当中，应该按照需求来使用，只引入需要的命名空间，或者直接显示指定，而不使用命名空间。
*/

using namespace std;

int main()
{
    //  1. 生成随机数
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<> distrib(1, 100);
    int secretNumber = distrib(gen); // 秘密数字就在这里！范围是 1 到 100

    int user_input = 0; // 用户的输入

    cout << "让我们来玩猜数字的游戏吧！" << endl;
    cout << "请输入数字！" << endl;

    //  2. 进行逻辑判断，捕获用户的输入，直到用户的输入等于生成的随机数，退出循环
    while(user_input != secretNumber)
    {
        // 先获取用户输入
        cin >> user_input; 

        if(user_input >= secretNumber)
        {
            cout << "大了" << endl;
        }
        else
        {
            cout << "小了" << endl;
        }
    }

    //  4. 一旦退出循环，说明成功了，祝贺用户
    cout << "祝贺你！猜对了" << endl;

    return 0;
}